/********************************************************************************
* File Name:	main.cpp
* Description:	第4章实例训练          
* Reference book:《Linux环境下Qt4图形界面与MySQL编程》，机械工业出版社.2012.1  
* E_mail: openlinux2011@gmail.com		                
*
********************************************************************************/
#include <QtCore/QCoreApplication>
#include <QtSql>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QString>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    //从MySql驱动程序中获取一个MySql数据库
    QSqlDatabase db=QSqlDatabase::addDatabase("QMYSQL");
    db.setHostName("localhost");//指定数据库服务器名称
    db.setDatabaseName("Student"); //连接一个已存在的数据
    db.setUserName("root");      //设置登录名
    db.setPassword("123456"); //设置登录密码

    //打开数据库连接
    if(db.open())
    {
        qDebug()<<"database is established!";
    }
    else
    {
        qDebug()<<"build error!";
        return a.exec();
    }

    QSqlQuery query; //定义一个QSqlQuery 类型的变量

    //创建数据库表，并填充数据
    query.exec(QObject::tr("create table student(snovar char(10) not null primary key,sname varchar(20) not null,sclass varchar(10) not null)"));
    query.exec(QObject::tr("insert into student(sno,sname, sclass) values('2009001','lilei','0901')"));
    query.exec(QObject::tr("insert into student(sno,sname, sclass) values('2009002','lucy','0902')"));
    query.exec(QObject::tr("insert into student(sno,sname, sclass) values('2009003','mike','0903')"));

    //执行数据库查询语句
    query.exec(QObject::tr("select * from student"));

    QSqlRecord rec=query.record();//返回查询语句执行的结果
    int count=rec.count();//获取查询到的记录的列数
    qDebug()<<"Number of coloumn : "<<count;
    //获取查询到的记录，并输出到控制台
    while(query.next())
    {
        rec=query.record();
        int snocol=rec.indexOf("sno");//返回该列的索引
        int snamecol=rec.indexOf("sname");
        int sclasscol=rec.indexOf("sclass");
        QString  value1=query.value(snocol).toString();//获取该列的数据值
        QString  value2=query.value(snamecol).toString();
        QString  value3=query.value(sclasscol).toString();
        qDebug()<<"sno : "<<value1<<"\t"<<"sname :"<<value2<<"\t"<<"sclass : "<<value3;
    }
    query.clear();//清空查询语句，并释放内存空间
    db.close();   //关闭数据库连接
    return a.exec();
}
